package com.zhu.instructions.math;

import com.zhu.instructions.base.NoOperandsInstruction;
import com.zhu.rtda.Frame;
import com.zhu.rtda.OperandStack;

/**
 * 指令：idiv
 *
 * 操作数：无
 *
 * 功能：
 *  将栈顶的两个 int 值相除：value1 / value2
 *  如果除数为 0，则抛出 ArithmeticException
 *
 * 栈变化：
 *      ..., value1(int), value2(int) → ..., result(int)
 *
 * 示例：
 *  6 / 2 = 3
 *  6 / 0 → 抛出 java.lang.ArithmeticException
 *
 * 实现：
 *  先检查除数是否为 0，若为 0 则抛出异常，否则执行除法
 */
public class IDIV extends NoOperandsInstruction {
    @Override
    public void execute(Frame frame) {
        OperandStack stack = frame.getOperandStack();
        int v2 = stack.popInt();
        int v1 = stack.popInt();
        if (v2 == 0) {
            throw new ArithmeticException("/ by zero");
        }
        int result = v1 / v2;
        stack.pushInt(result);
    }
}